package main

import (
	"fmt"
	"time"
)

/*
go语言并发编程
类似于java中的Thread
go语言使用 go func(params)可以创建一个新的线程去执行一个函数

在Go语言编程中你不需要去自己写进程、线程、协程，你的技能包里只有一个技能–goroutine，当你需要让某个任务并发执行的时候，你只需要把这个任务包装成一个函数，开启一个goroutine去执行这个函数就可以了，就是这么简单粗暴。
*/
/*
协程：独立的栈空间，共享堆空间，调度由用户自己控制，本质上有点类似于用户级线程，这些用户级线程的调度也是自己实现的。
线程：一个线程上可以跑多个协程，协程是轻量级的线程。
*/

func say(s string) {
	for i := 0; i < 5; i++ {
		time.Sleep(100 * time.Millisecond)
		fmt.Println(s)
	}
}
func main() {
	go say("world") //创建一个新的线程运行say("world")

	time.Sleep(5 * time.Second) //主线程睡眠5秒等待子线程运行完
	fmt.Println("main thread运行到这里")
}
